package hashmap;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * @Author admin
 * @Date 2019/4/3 10:31
 * HashMap就是一个容器，存储多列，每个元素包含一对键值对，
 * key唯一，value可以重复
 */
public class Test {
    public static void main(String[] args) {
        /*创建HashMap对象，添加元素（键值对），遍历输出所有元素*/
        HashMap<Integer, Student> hashMap = new HashMap<Integer, Student>();
        /*key是唯一的，所以可以把Student的id作为key
         * 这样根据key能很方便找到value*/
        Student s1=new Student(1,"张三");
        Student s2=new Student(2,"历史");
        Student s3=new Student(3,"张三");
        hashMap.put(s1.getId(),s1);
        hashMap.put(s2.getId(),s2);
        hashMap.put(s3.getId(),s3);


        System.out.println(hashMap.get(s2.getId()));


        System.out.println("hashmap中所有元素");
        /*遍历输出所有元素：*/
        /*第一种 遍历方法：键找值
        *
        *1.先得到所有键的集合（Set（） set接口，HashSet就是实现set的接口
        * 得到迭代器对象（通过集合的iterator）*/
        Set<Integer> set = hashMap.keySet();
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            /*
            * 取出迭代器种的一个元素
            * 迭代器中的元素都是key*/
            Integer key=(Integer) iterator.next();
            /*根据key得到value*/
            System.out.println(hashMap.get(key));
        }
        System.out.println("第二种遍历方法：");
        /*第二种方法：键值对对象找键找值
        * 1.先得到迭代器对象
        * 1）hashMap的entrySet()方法得到集合set
        * 2）set集合的iterator()获得迭代器对象
        * 2.循环：判断迭代器中是否有元素
        * 若有，取出该元素
        * 该元素是键值对：根据键值对获取key，再根据key获得value*/
        Set<Map.Entry<Integer,Student>> set1 = hashMap.entrySet();
        Iterator iterator1 = set1.iterator();
        while (iterator1.hasNext()){
            Map.Entry<Integer,Student> entry=(Map.Entry<Integer,Student>)iterator1.next();
            Integer key = entry.getKey();
            Student value=hashMap.get(key);
            System.out.println(value);
        }

    }
}
